package com.mobile.business.grid;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.mobile.business.BaseBusiness;
import com.mobile.gridUtil.FilterBean;
import com.mobile.gridUtil.GridFilter;
import com.mobile.gridUtil.ParseFilterData;
import com.mobile.tools.PageBean;
/**
 * 实现grid的业务类
 * @author hf
 *
 * @param <T>		pojo类
 */
public class GridBusiness<T> extends BaseBusiness implements IGridBusiness<T> {
	private final Logger LOGGER = LogManager.getLogger(GridBusiness.class);
	/**
	 * 用来创建org.hibernate.criterion.Example的pojo类
	 */
	private T pojo;
	
	public GridBusiness(){
		super();
	}
	
	public GridBusiness(T pojo) {
		super();
		this.pojo = pojo;
	}
	/**
	 * 获得有默认参数的pojo
	 * @return
	 */
	public T getPojo() {
		return pojo;
	}
	public void setPojo(T pojo) {
		this.pojo = pojo;
	}
	/**
	 * 分页
	 * @param start 			跳转的页数（开始的页数）
	 * @param pageSize			一页有多少行
	 * @param pojo				用来创建org.hibernate.criterion.Example的pojo类
	 * @param gridFilterList	查询条件树组
	 * @return
	 */
	public PageBean<T> getPageRecord(int start,int pageSize,List<GridFilter> gridFilterList){
		/**
		 * list 			从查询中获得的数据集合
		 * startid			设置开始查询的位置
		 * total			总共返回的数据的总数
		 */
		PageBean<T> pageBean=new PageBean<T>();
		List<T> list=new ArrayList<T>();
		int startid=0;
		int total=0;
		pageBean.setPageSize(pageSize);
		/**
		 * 查询总数，设置总条数
		 */
		total=baseDAO.getTotalSize(pojo, gridFilterList);
		pageBean.setTotalSize(total);
		
		/**
		 * 设置总共页数
		 */
		if(total>pageSize)
		{
			if(total%pageSize==0)
			{
				pageBean.setTotalPage((int)((double)total/(double)pageSize));
			}
			else
			{
				pageBean.setTotalPage((int)(1.0d+(double)total/(double)pageSize));
			}
		}
		else
		{
			total=1;
			pageBean.setTotalPage(1);
		}
		
		/**
		 * 判断当前页和确定初始页
		 */
		if(start<=0)
		{
			startid=0;
		}
		else
		{
			if(startid>pageBean.getTotalPage())
			{
				startid=pageBean.getTotalPage();
				startid=pageSize*(startid-1);
			}
			else
			{
				startid=pageSize*(start-1);
			}
		}
		pageBean.setCurrentPate(start);
		list=baseDAO.getPageList(startid, pageSize, pojo, gridFilterList);
		pageBean.setList(list);
		return pageBean;
	}
	/**
	 * grid过滤
	 * @param start
	 * @param pageSize
	 * @param form
	 * @param map
	 * @return
	 */
	public PageBean<T> getPageBean(int start,int pageSize,Map<String,FilterBean> map){
		List<GridFilter> gridFilterList=new ArrayList<GridFilter>();
		gridFilterList=ParseFilterData.parse(map);
		return getPageRecord(start, pageSize, gridFilterList);
	}
	/**
	 * 删除多条记录
	 * @param uniqueCodes
	 */
	public void delete(String[] uniqueCodes){
		
		baseDAO.deleteById(pojo.getClass(),uniqueCodes);
	}
	/**
	 * 通过唯一标识码来查找对象
	 * @param cl			域对象
	 * @param uniqueCode	唯一标识码
	 * @return
	 */
	public T findById(Class cl,String uniqueCode){
		T pojo=(T)baseDAO.findById(cl,uniqueCode);
		return pojo;
	}
	public PageBean<T> getPageRecord(int start,int pageSize,String entityName,List<GridFilter> gridFilterList){
		return null;
	}
	/**
	 * 获得所有数据
	 * @param cl				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List<T> getAllList(Class cl,List<GridFilter> gridFilterList){
		return baseDAO.getAllList(cl, gridFilterList);
	}
	/**
	 * 获得所有数据
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List<T> getAllList(Object pojo,List<GridFilter> gridFilterList){
		return baseDAO.getAllList(pojo, gridFilterList);
	}
	/**
	 * 获得所有数据
	 * @param cl				域模型的类
	 * @param map				需要处理的的map数据
	 * @return					列表
	 */
	public List<T> getAllList(Class cl,Map<String,FilterBean> map){
		List<GridFilter> gridFilterList=new ArrayList<GridFilter>();
		gridFilterList=ParseFilterData.parse(map);		
		return getAllList(cl,gridFilterList);
	}
	/**
	 * 获得所有数据
	 * @param map				需要处理的的map数据
	 * @return					列表
	 */
	public List<T> getAllList(Map<String,FilterBean> map){
		List<GridFilter> gridFilterList=new ArrayList<GridFilter>();
		gridFilterList=ParseFilterData.parse(map);		
		return getAllList(this.pojo,gridFilterList);
	}
}
